Return to start page

Systems/Gui/Struct Vote.j

Code

		
1			library AStructSystemsGuiVote requires AStructCoreGeneralVector, ALibraryCoreGeneralPlayer, AStructSystemsGuiGui
2
3 function interface AVoteResultAction takes AVote vote returns nothing
4
5 /// @todo Maybe votes shouldn't be started for all playing players (player groups/forces).
6 struct AVote
7 //static start members
8 private static real m_messageDuration
9 private static string m_voteMessage
10 private static string m_resultMessage
11 //static members
12 private static thistype m_activeVote
13 //start members
14 private string m_message
15 private AVoteResultAction m_resultAction
16 //members
17 private AStringVector m_choices
18 private AIntegerVector m_choiceVotes
19 private boolean array m_playerHasVoted[12] /// @todo bj_MAX_PLAYERS
20
21 //start members
22
23 public method message takes nothing returns string
24 return this.m_message
25 endmethod
26
27 //method
28
29 private static method dialogButtonActionVote takes ADialogButton dialogButton returns nothing
30 call thistype.m_activeVote.addVote(dialogButton.dialog().player(), dialogButton.index())
31 endmethod
32
33 public method start takes nothing returns nothing
34 local player user
35 local integer i = 0
36 local integer j
37 set thistype.m_activeVote = this
38 loop
39 exitwhen (i == bj_MAX_PLAYERS)
40 set user = Player(i)
41 if (IsPlayerPlayingUser(user)) then
42 set this.m_playerHasVoted[GetPlayerId(user)] = false
43 call AGui.playerGui(user).dialog().clear()
44 call AGui.playerGui(user).dialog().setMessage(this.m_message)
45 set j = 0
46 loop
47 exitwhen (j == this.m_choices.size())
48 call AGui.playerGui(user).dialog().addDialogButton(this.m_choices[j], 0, thistype.dialogButtonActionVote)
49 set j = j + 1
50 endloop
51 call AGui.playerGui(user).dialog().show()
52 endif
53 set i = i + 1
54 endloop
55 endmethod
56
57 public method addChoice takes string choice returns integer
58 call this.m_choices.pushBack(choice)
59 call this.m_choiceVotes.pushBack(0)
60 return this.m_choices.backIndex()
61 endmethod
62
63 public method addVote takes player user, integer choice returns boolean
64 local integer i
65 local player playingPlayer
66 local integer result
67 set this.m_choiceVotes[choice] = this.m_choiceVotes[choice] + 1
68 /// @todo Show vote message
69 set this.m_playerHasVoted[GetPlayerId(user)] = true
70 set i = 0
71 loop
72 exitwhen (i == bj_MAX_PLAYERS)
73 set playingPlayer = Player(i)
74 if (IsPlayerPlayingUser(playingPlayer) and playingPlayer != user) then
75 call DisplayTimedTextToPlayer(playingPlayer, 0.0, 0.0, thistype.m_messageDuration, IntegerArg(StringArg(StringArg(thistype.m_voteMessage, GetPlayerName(user)), this.m_choices[choice]), this.m_choiceVotes[choice]))
76 endif
77 set playingPlayer = null
78 set i = i + 1
79 endloop
80 set i = 0
81 loop
82 exitwhen (i == bj_MAX_PLAYERS)
83 set playingPlayer = Player(i)
84 if (not this.m_playerHasVoted[i] and IsPlayerPlayingUser(playingPlayer)) then
85 return false
86 endif
87 set playingPlayer = null
88 set i = i + 1
89 endloop
90 set result = this.result()
91 set i = 0
92 loop
93 exitwhen (i == bj_MAX_PLAYERS)
94 set playingPlayer = Player(i)
95 if (IsPlayerPlayingUser(playingPlayer)) then
96 call DisplayTimedTextToPlayer(playingPlayer, 0.0, 0.0, thistype.m_messageDuration, IntegerArg(StringArg(thistype.m_resultMessage, this.m_choices[result]), this.m_choiceVotes[result]))
97 endif
98 set playingPlayer = null
99 set i = i + 1
100 endloop
101 call this.m_resultAction.execute(this)
102 return true
103 endmethod
104
105 public method result takes nothing returns integer
106 local integer result = 0
107 local integer i = 1
108 loop
109 exitwhen (i == this.m_choiceVotes.size())
110 if (this.m_choiceVotes[i] > this.m_choiceVotes[result]) then
111 set result = i
112 endif
113 set i = i + 1
114 endloop
115 return result
116 endmethod
117
118 public static method create takes string message, AVoteResultAction resultAction returns thistype
119 local thistype this = thistype.allocate()
120 //start members
121 set this.m_message = message
122 set this.m_resultAction = resultAction
123 //members
124 set this.m_choices = AStringVector.create()
125 set this.m_choiceVotes = AIntegerVector.create()
126
127 return this
128 endmethod
129
130 public method onDestroy takes nothing returns nothing
131 //members
132 call this.m_choices.destroy()
133 call this.m_choiceVotes.destroy()
134 endmethod
135
136 public static method init takes real messageDuration, string voteMessage, string resultMessage returns nothing
137 //static start members
138 set thistype.m_messageDuration = messageDuration
139 set thistype.m_voteMessage = voteMessage
140 set thistype.m_resultMessage = resultMessage
141 //statc members
142 set thistype.m_activeVote = 0
143 endmethod
144
145 public static method activeVote takes nothing returns thistype
146 return thistype.m_activeVote
147 endmethod
148 endstruct
149
150 endlibrary